﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Configuration;
using System.Data.SqlClient;
using System.Web.Configuration;
using TheBullysStore.Models.ModuloVentas;
using log4net;





namespace TheBullysStore.Models.ModuloAdministracion.Horario
{
    public class HorarioDAO
    {
        private static ILog log = LogManager.GetLogger(typeof(HorarioDAO));



        public List<Personal> buscarPersonal(FiltroBusqueda filtroBusqueda)
        {

            String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;
            List<Personal> listaPersonal = new List<Personal>();
            SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);
            sqlCon.Open();
            try
            {
                string commandString = "";
                if (filtroBusqueda.est.Trim().Equals("0"))
                {
                    commandString = "select  p.Nombres,p.Apellidos ,p.tipo_documento,p.Nro_Documento_persona,p.Telefono,c.Descripcion as 'cargo', p.id_persona from persona p  inner join personal pl on p.id_persona=pl.Id_Personal inner join cargo c on c.Id_Cargo=p.Id_Cargo  where  p.id_edificio="+ filtroBusqueda.idEdificio+" and p.estado=1 and p.id_persona not in (select distinct id_personal from horario_trabajo where Estado=1)    ";
                }
                else
                {
                    commandString = "select  p.Nombres,p.Apellidos ,p.tipo_documento,p.Nro_Documento_persona,p.Telefono,c.Descripcion as 'cargo', p.id_persona from persona p  inner join personal pl on p.id_persona=pl.Id_Personal inner join cargo c on c.Id_Cargo=p.Id_Cargo  where p.id_edificio=" + filtroBusqueda.idEdificio + " and  p.estado=1 and p.id_persona  in (select distinct id_personal from horario_trabajo where Estado=1)    ";
                }
                string filtro = "";
                //  where p.Nombres like '%asd%' and p.Apellidos like '%asd%' and c.Id_Cargo =2 and p.Nro_Documento_persona like '%1%'"


                if (!(filtroBusqueda.nombres == null || filtroBusqueda.nombres.Trim().Equals("")))
                {
                    filtro = filtro + " and  p.Nombres like '%" + filtroBusqueda.nombres.Trim() + "%'  ";
                }

                if (!(filtroBusqueda.apellidos == null || filtroBusqueda.apellidos.Trim().Equals("")))
                {
                    filtro = filtro + " and  p.apellidos like '%" + filtroBusqueda.apellidos.Trim() + "%' ";
                }

                if (!(filtroBusqueda.nro_documento == null || filtroBusqueda.nro_documento.Trim().Equals("")))
                {
                    filtro = filtro + " and p.nro_documento_persona like '%" + filtroBusqueda.nro_documento.Trim() + "%' ";
                }

                if (!(filtroBusqueda.id_cargo == 0))
                {
                    filtro = filtro + " and  c.Id_Cargo = " + filtroBusqueda.id_cargo;
                }


                commandString = commandString + filtro;
                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    Personal personal;
                    //cliente. = (int)dataReader["idUsuario"];
                    personal.id = (int)dataReader["id_persona"];
                    personal.nombres = (string)dataReader["nombres"];
                    personal.apellidos = (string)dataReader["apellidos"];
                    personal.tipo_documento = (string)dataReader["tipo_documento"];
                    personal.nro_documento = (string)dataReader["Nro_Documento_persona"];
                    personal.cargo = (string)dataReader["cargo"];
                    personal.telefono = (string)dataReader["telefono"];
                    personal.tiene_Horario = false;
                    listaPersonal.Add(personal);
                }
                dataReader.Close();
                sqlCon.Close();

                return listaPersonal;
            }
            catch (Exception ex)
            {
                sqlCon.Close();
                return null;

            }


        }

        public List<Cargo> buscarCargo()
        {
            String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;
            List<Cargo> listaCargo = new List<Cargo>();
            SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);
            sqlCon.Open();
            try
            {

                string commandString = "select Id_Cargo,Descripcion from cargo where estado=1 ";


                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    Cargo cargo;
                    //cliente. = (int)dataReader["idUsuario"];


                    cargo.id = (int)dataReader["Id_Cargo"];
                    cargo.descripcion = (string)dataReader["descripcion"];
                    listaCargo.Add(cargo);
                }
                dataReader.Close();
                sqlCon.Close();

                return listaCargo;
            }
            catch (Exception ex)
            {
                sqlCon.Close();
                return null;

            }


        }

        public string RegistrarHorario(HorarioBean horario)
        {




            //******************************************************************
            int edificio = horario.idEdificio;
            //******************************************************************

            string mensaje = "";
            String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;
            string commandString = "";
            SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);
            sqlCon.Open();








            try
            {

                if (horario.accion.Equals("0"))
                {
                    commandString = "update  horario_trabajo set estado=0 where id_personal=" + horario.id_persona ;
                    mensaje = "Se elimino el horario correctamente";

                }
                if (horario.accion.Equals("1"))
                {
                    commandString = "insert into horario_trabajo values('" + horario.LuI + "-" + horario.LuF + "','" + horario.MaI + "-" + horario.MaF + "','" + horario.MiI + "-" + horario.MiF + "','" + horario.JuI + "-" + horario.JuF + "','" + horario.ViI + "-" + horario.ViF + "','" + horario.SaI + "-" + horario.SaF + "','" + horario.DoI + "-" + horario.DoF + "',1," + edificio + "," + horario.id_persona + ")";
                    mensaje = "Se inserto el horario correctamente";
                }
                if (horario.accion.Equals("2"))
                {
                    commandString = "update horario_trabajo set lunes='" + horario.LuI + "-" + horario.LuF + "', martes='" + horario.MaI + "-" + horario.MaF + "',miercoles='" + horario.MiI + "-" + horario.MiF + "',jueves='" + horario.JuI + "-" + horario.JuF + "',viernes='" + horario.ViI + "-" + horario.ViF + "',sabado='" + horario.SaI + "-" + horario.SaF + "',domingo='" + horario.DoI + "-" + horario.DoF + "' where   estado=1 and id_personal=" + horario.id_persona + "";
                    mensaje = "Se modifico el horario correctamente";
                }
                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                sqlCmd.ExecuteNonQuery();
             
            }

            catch (Exception ex)
            {

                if (horario.accion.Equals("0"))
                {
                    mensaje = "No se pudo eliminar el horario correctamente";

                }
                if (horario.accion.Equals("1"))
                {
                    mensaje = "No se pudo insertar el horario correctamente";
                }
                if (horario.accion.Equals("2"))
                {
                    mensaje = "No se pudo modificar el horario correctamente";
                }
                
                if (horario.accion == "0")
                {
                    log.Error(" Eliminar horario - GET(EXCEPTION):", ex);
                }


                if (horario.accion == "1")
                {
                    log.Error(" Registrar horario - GET(EXCEPTION):", ex);
                }

                if (horario.accion == "2")
                {
                    log.Error(" Modificar horario - GET(EXCEPTION):", ex);
                }


                
                //  horario.conexion = "Falla en Conexion";
            
            }
            finally {
                sqlCon.Close();
            }

            return mensaje;
        }




        public Boolean ExisteCliente(int id_tipoDocumento, string nro_documento)
        {
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "SELECT * FROM Persona WHERE id_tipoDocumento = " + id_tipoDocumento + "AND UPPER(nro_documento) = '" + nro_documento.ToUpper() + "'";


                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                if (dataReader.Read())
                {
                    ClienteBean cliente = new ClienteBean();
                    //cliente.id_tipoDocumento = (string)dataReader["id_tipoDocumento"];
                    //cliente.nro_documento = (string)dataReader["RUC"];

                    cliente.nombres = (string)dataReader["nombres"];
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                return false;
            }
        }







        public HorarioBean buscarHorario(int id_personal)
        {

            HorarioBean horario = new HorarioBean();

            String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

            SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

            try
            {
                sqlCon.Open();

                //string commandString = "insert into tema values('te45678eeeema1','temaaaaaaa1')";

                //SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                //sqlCmd.ExecuteNonQuery();




                string commandString = "SELECT top 1 * FROM horario_trabajo where estado=1  and  id_personal='" + id_personal + "' order by 1 desc";
                // commandString = "SELECT * FROM horario_trabajo where tipo_documento='dni' and nro_documento='12312312'";
                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                if (dataReader.Read())
                {
                    string[] var;
                    string texto;

                    //cliente. = (int)dataReader["idUsuario"];
                    texto = (string)dataReader["lunes"];
                    var = texto.Split('-');
                    horario.LuI = (var[0].Trim() != "none") ? var[0].Trim() : "";
                    horario.LuF = var[1].Trim() != "none" ? var[1].Trim() : "";

                    texto = (string)dataReader["martes"];
                    var = texto.Split('-');
                    horario.MaI = (var[0].Trim() != "none") ? var[0].Trim() : "";
                    horario.MaF = var[1].Trim() != "none" ? var[1].Trim() : "";

                    texto = (string)dataReader["miercoles"];
                    var = texto.Split('-');
                    horario.MiI = (var[0].Trim() != "none") ? var[0].Trim() : "";
                    horario.MiF = var[1].Trim() != "none" ? var[1].Trim() : "";

                    texto = (string)dataReader["jueves"];
                    var = texto.Split('-');
                    horario.JuI = (var[0].Trim() != "none") ? var[0].Trim() : "";
                    horario.JuF = var[1].Trim() != "none" ? var[1].Trim() : "";

                    texto = (string)dataReader["viernes"];
                    var = texto.Split('-');
                    horario.ViI = (var[0].Trim() != "none") ? var[0].Trim() : "";
                    horario.ViF = var[1].Trim() != "none" ? var[1].Trim() : "";

                    texto = (string)dataReader["sabado"];
                    var = texto.Split('-');
                    horario.SaI = (var[0].Trim() != "none") ? var[0].Trim() : "";
                    horario.SaF = var[1].Trim() != "none" ? var[1].Trim() : "";

                    texto = (string)dataReader["domingo"];
                    var = texto.Split('-');
                    horario.DoI = (var[0].Trim() != "none") ? var[0].Trim() : "";
                    horario.DoF = var[1].Trim() != "none" ? var[1].Trim() : "";




                }
                //HorarioBean horario = new HorarioBean();

                //horario.LuI = "lunes1111";
                //horario.LuF = "lunes2222";
                //listaHorario.Add(horario);
                dataReader.Close();
                sqlCon.Close();
            }
            catch (Exception ex)
            {

                sqlCon.Close();

                //string commandString2 = "insert into tema values('te45678eeeema1','temaaaaaaa1')";

                //SqlCommand sqlCmd2 = new SqlCommand(commandString2, sqlCon);

                //sqlCmd2.ExecuteNonQuery();

                //List<HorarioBean> listaHorario2 = new List<HorarioBean>();
                //HorarioBean horario = new HorarioBean();

                //horario.LuI = "exlunes1111";
                //horario.LuF = "exlunes2222";
                //listaHorario2.Add(horario);

                return null;
            }
            return horario;
        }




        public List<ClienteBean> ListarCliente(String Nombre, String Apellido, String tipo_documento, String nro_documento)
        {

            List<ClienteBean> listaClientes = new List<ClienteBean>();

            String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

            SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);
            sqlCon.Open();

            string commandString = "SELECT * FROM persona";
            bool result = Nombre.Equals("");
            if (!result) commandString = commandString + " WHERE UPPER(nombres) LIKE '%" + Nombre.ToUpper() + "%'";
            SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
            SqlDataReader dataReader = sqlCmd.ExecuteReader();

            while (dataReader.Read())
            {
                ClienteBean cliente = new ClienteBean();
                //cliente. = (int)dataReader["idUsuario"];
                cliente.nombres = (string)dataReader["nombres"];
                cliente.apellidos = (string)dataReader["apellidos"];
                cliente.tipo_documento = (string)dataReader["tipo_documento"];
                cliente.nro_documento = (string)dataReader["Nro_Documento"];

                listaClientes.Add(cliente);
            }
            dataReader.Close();
            sqlCon.Close();

            return listaClientes;
        }



        internal List<ClienteBean> ListarClienteMod(string tipo_documento, string nro_documento)
        {
            List<ClienteBean> listaClientes = new List<ClienteBean>();

            String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

            SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);
            sqlCon.Open();

            string commandString0 = "UPDATE dbo.persona SET Nombres = 'pablo'";
            commandString0 = commandString0 + " WHERE tipo_documento = '" + tipo_documento + "' and nro_documento = '" + nro_documento + "'";
            SqlCommand sqlCmd0 = new SqlCommand(commandString0, sqlCon);
            sqlCmd0.ExecuteNonQuery();

            string commandString = "SELECT * FROM persona";
            commandString = commandString + " WHERE tipo_documento = '" + tipo_documento + "' and nro_documento = '" + nro_documento + "'";
            SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
            SqlDataReader dataReader = sqlCmd.ExecuteReader();

            while (dataReader.Read())
            {
                ClienteBean cliente = new ClienteBean();
                //cliente. = (int)dataReader["idUsuario"];
                cliente.nombres = (string)dataReader["nombres"];
                cliente.apellidos = (string)dataReader["apellidos"];
                cliente.tipo_documento = (string)dataReader["tipo_documento"];
                cliente.nro_documento = (string)dataReader["Nro_Documento"];

                listaClientes.Add(cliente);
            }
            dataReader.Close();
            sqlCon.Close();

            return listaClientes;
        }
    }
}
